package day1211_1;

class  WaterOut extends  Thread{
    Pool   po;
    WaterOut(Pool  p){po=p;}
    public void run() {
        System.out.println("开始从水池中取出水");//1.提示开始排水
        try {
            synchronized (po){//2.排水之前先用wait()等待(需要水池放满水再取)
                po.wait();
            }
            for(int i=1;i<=5;i++){//3.for 执行5次sleep() 模拟取5次水
                Thread.sleep(1000);
                System.out.println("从水池中取出水第"+i+"分钟");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        po.water=false;//4.水池对象.water=true  表示取完水 将变量改为false 表示水池没水了
        System.out.println("排水完毕");//5.提示"排水完毕"
    }
}






class  WaterIn extends  Thread{
    Pool   po;
    WaterIn(Pool  p){po=p;}
    public void run() {
        System.out.println("开始给水池中存水");//1.开始存水
        for(int i=1;i<=5;i++){//2.for 执行5次sleep()模拟给水池中存5次水，才放满
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("给水池中存水的第"+i+"分钟");
        }
        po.water=true;//3.水池对象.water=true  表示把水池放满水了
        synchronized (po){
            po.notify();//4.通知其他线程运行(其他线程可以取水了)  对象.notify()
        }
    }
}




class Pool{//本类模拟两个线程公用的一个水池对象
    boolean  water=false;//water变量水是否是满的
}



public class T3Out {
    public static void main(String[] args) {
        Pool  pool=new Pool();
        //创建WaterIn(给水池对象pool中放水)和WaterOut线程(从水池对象pool中取水)
        // 并启动他们俩线程
        WaterIn  person1=new WaterIn(pool);
        WaterOut  person2=new WaterOut(pool);
        person1.start();
        person2.start();
    }
}


